package com.zzyl.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 资源树结构体
 * 树形结构中的节点对象，表示树中的每一个具体节点
 * <p>
 * TreeVo: 根节点，包含了一个子节点的集合List<TreeItemVo>
 * List<TreeItemVo>: 子节点的集合
 * TreeItemVo: 子节点 -- 其下还可以有新的子节点集合List<TreeItemVo>
 */
@Data
@NoArgsConstructor
@ApiModel("菜单项VO")
public class TreeItemVo implements Serializable {

    /**
     * 表示当前节点的唯一标识符
     */
    @ApiModelProperty(value = "节点ID")
    public String id;

    /**
     * 表示节点的显示内容，可以是该节点的名称或描述
     */
    @ApiModelProperty(value = "显示内容")
    public String label;

    /**
     * 表示该节点的子节点，是一个 List<TreeItemVo> 类型的列表。通过该字段，可以实现多层级的树形结构
     */
    @ApiModelProperty(value = "子节点的集合")
    public List<TreeItemVo> children = new ArrayList<>();

    /**
     * @Builder 是 Lombok 提供的一个注解，它自动为类生成一个 Builder 模式的构造器。
     * 使用 Builder 模式时，可以通过链式调用来创建该类的对象，代码更加简洁清晰。例如：
     * TreeItemVo treeItem = TreeItemVo.builder()
     *                                  .id("1")
     *                                  .label("节点1")
     *                                  .children(new ArrayList<>())
     *                                  .build();
     */
    @Builder
    public TreeItemVo(String id, String label, List<TreeItemVo> children) {
        this.id = id;
        this.label = label;
        this.children = children;
    }
}
